﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades.Negocio;
using Entidades;
using AccesoDatos;

namespace LogicaNegocios
{
    static public class MensajeLN
    {

        static public Mensaje agregarMensaje(this Mensaje mensajeview)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            MENSAJE mensaje = mensajeview.toMENSAJE();
            mensaje.CHRESTADO = Constantes.ESTADO_HABILITADO;
            contexto.MENSAJE.AddObject(mensaje);
            contexto.SaveChanges();
            return mensaje.toMensaje();
        }

        static public void modificarMensaje(this Mensaje mensajeview)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            MENSAJE mensaje = contexto.MENSAJE.Where(m => m.INTCODMENSAJE == mensajeview.id).FirstOrDefault();
            mensaje.INTCICLICO = Convert.ToInt16(mensajeview.booleanToNroStr(mensajeview.ciclico));
            mensaje.CHRDIASEMISION = mensajeview.diasEmision;
            mensaje.VCHDESCRIPCION = mensajeview.mensaje;
            mensaje.DTMFECHAEMITIR = mensajeview.fechaEmitir;
            mensaje.CHRESTADO = Constantes.ESTADO_HABILITADO;
            mensaje.DTMFECHATERMINO = mensajeview.fechaTermino;
            mensaje.INTINTERVALO = Convert.ToInt16(mensajeview.booleanToNroStr(mensajeview.intervalo));
            mensaje.INTINTERVALOHORAS = mensajeview.intervaloHoras;
            mensaje.INTINTERVALOMINUTOS = mensajeview.intervaloMinutos;
            mensaje.INTVECESREPETIR = mensajeview.vecesRepetir;
            mensaje.VCHUSUARIOCREACION = mensajeview.VCHUSUARIOCREACION;
            mensaje.DTMFECHACREACION = mensajeview.DTMFECHACREACION;
            mensaje.VCHUSUARIOMODIFICACION = mensajeview.VCHUSUARIOMODIFICACION;
            mensaje.DTMFECHAMODIFICACION = mensajeview.DTMFECHAMODIFICACION;
            contexto.SaveChanges();
        }

        static public void eliminarMensaje(this Mensaje mensajeview)
       {
           MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
           MENSAJE mensaje = contexto.MENSAJE.Where(m => m.INTCODMENSAJE == mensajeview.id).FirstOrDefault();
           mensaje.CHRESTADO = Constantes.ESTADO_ELIMINADO;
           contexto.SaveChanges();
       }

       static public List<Mensaje> listarMensaje()
       {
           MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
           List<MENSAJE> listaMENSAJE = contexto.MENSAJE.Where(m => m.CHRESTADO.Equals(Constantes.ESTADO_HABILITADO)).ToList();
           List<Mensaje> listaMensaje = new List<Mensaje>();
           foreach (MENSAJE mensaje in listaMENSAJE)
           {
               listaMensaje.Add(mensaje.toMensaje());
           }
           return listaMensaje;
       }




       static public List<Mensaje> listarMensajeValidos()
       {
           //List<Mensaje> mensaje = new List<Mensaje>();
           MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();

           List<MENSAJE> listaMENSAJE = contexto.MENSAJE.Where(m => m.CHRESTADO.Equals(Constantes.ESTADO_HABILITADO)).ToList();
           List<Mensaje> listaMensaje = new List<Mensaje>();
           foreach (MENSAJE mensaje in listaMENSAJE)
           {
               listaMensaje.Add(mensaje.toMensaje());
           }

           List<Mensaje> listaMensajesReproducir = new List<Mensaje>();
           foreach (Mensaje mensaje in listaMensaje)
           {
               Boolean agregar = false;
               if (mensaje.intervalo)
               {
                   DateTime fechaActual = DateTime.Now;
                   TimeSpan difFechas = new TimeSpan(mensaje.fechaEmitir.Ticks - fechaActual.Ticks);

                   Double minutosPasados = Math.Truncate(difFechas.TotalMinutes);
                   Double intervalo = (mensaje.intervaloHoras * 60) + mensaje.intervaloMinutos;

                   Double tiempo = minutosPasados / intervalo;
                   if ((tiempo - Math.Truncate(tiempo)) == 0)
                   {
                       agregar = true;
                   }
               }
               else {
                   if ((mensaje.fechaEmitir.Hour == DateTime.Now.Hour) && (mensaje.fechaEmitir.Minute == DateTime.Now.Minute))
                   { 
                       agregar = true;
                   }
               }

               if (agregar)
               {
                   int pos = -1;
                   switch (DateTime.Now.DayOfWeek)
                   {
                       case DayOfWeek.Sunday: pos = 0; break;
                       case DayOfWeek.Monday: pos = 1; break;
                       case DayOfWeek.Tuesday: pos = 2; break;
                       case DayOfWeek.Wednesday: pos = 3; break;
                       case DayOfWeek.Thursday: pos = 4; break;
                       case DayOfWeek.Friday: pos = 5; break;
                       case DayOfWeek.Saturday: pos = 6; break;
                   }
                   if (pos > -1)
                   {
                       if (mensaje.diasEmision.Substring(pos, 1) == "1")
                       {
                           listaMensajesReproducir.Add(mensaje);
                       }
                   }
               }
           }

           return listaMensajesReproducir;
       }
        
    }
}
